import { IsEnum, IsNumber, IsOptional, IsString, IsObject } from "class-validator";
import { FileType } from "@/common/enums/file.enum";
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";

// 不同类型文件的metadata结构
type FileMetadata = {
  // 小说特有信息
  novel?: {
    total_chapters: number;
    author?: string;
    description?: string;
  };

  // 文档特有信息
  document?: {
    page_count?: number;
    author?: string;
    title?: string;
  };

  // 图片特有信息
  image?: {
    width: number;
    height: number;
    format: string;
  };

  // 通用信息
  custom?: Record<string, any>;
}

export class UploadFileDto {

  @ApiPropertyOptional({ description: '文件类型,决定文件存储的子目录,默认Other' })
  @IsEnum(FileType)
  fileType: FileType;

  @ApiPropertyOptional({ description: 'MIME类型,用于下载时设置正确的Content-Type' })
  @IsString()
  @IsOptional()
  mimeType?: string;


  @ApiPropertyOptional({ description: '文件元数据,不同类型文件有不同的metadata' })
  @IsOptional()
  @IsString()
  metadata?: string;
}